include(FetchContent)

# 声明要下载的 Catch2 项目
# 您可以根据需要更改 GIT_REPOSITORY 和 GIT_TAG
FetchContent_Declare(
    Catch2
    GIT_REPOSITORY https://github.com/catchorg/Catch2.git
    GIT_TAG v3.9.0
)

# 使 Catch2 可用，这将下载并添加 Catch2 作为子项目
FetchContent_MakeAvailable(Catch2)

# 定义测试源文件
# 重要：这里是测试的入口点，通常包含 #define CATCH_CONFIG_MAIN
# 和 #include <catch2/catch_all.hpp>
file(GLOB_RECURSE TEST_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)

# 创建一个测试可执行文件
add_executable(m_tests ${TEST_SOURCES})

# 链接到 Catch2 库（FetchContent 会自动提供一个名为 Catch2::Catch2 的目标）
# 并链接到你自己的库
target_link_libraries(
    m_tests PRIVATE
    Catch2::Catch2
)

# 设置包含目录，通常 Catch2 的头文件会自动被 Catch2::Catch2 目标处理
# 但如果你的测试文件需要引用其他头文件，可以在这里添加
target_include_directories(
    m_tests PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR} # 如果测试文件在当前目录
    ${CMAKE_SOURCE_DIR}/src     # 访问 my_library.h
)

# 将可执行文件注册为 CTest 的测试
add_test(NAME DeterministicKinematicTests COMMAND m_tests)